home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 526-550 / disk_539 / rpn / source / setup.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  8KB  |  261 lines

  1. /*-----------------------------------------*
  2.  | File: SETUP.c - MLO 900131 V1.00        |
  3.  | Setup of RPN windows, menus and gadgets |
  4.  *-----------------------------------------*/
  5.  
  6. #include "rpn.h"
  7. #include "proto.h"
  8. #include "setup.h"
  9. #include "gadget.h"
  10. #include "menu.h"
  11. #include <string.h>
  12. #include <exec/memory.h>
  13.  
  14. extern struct IntuitionBase *IntuitionBase;
  15. extern struct GfxBase *GfxBase;
  16. extern struct Window *Wrpn;
  17. extern struct Window *Wreg;
  18. extern struct RastPort *pRP;
  19. extern struct Menu *MenuStrip;
  20. extern struct Gadget *FirstGadget;
  21. extern struct Gadget *pIG;
  22. extern struct StringInfo *pIS;
  23.  
  24. /*--------------------------------------*
  25.  | Pointers to copies in chip memory of |
  26.  | the image nibbles, and their length  |
  27.  *--------------------------------------*/
  28.  
  29. static USHORT *ChipSqrImageBits = NULL;
  30. static USHORT *ChipX2ImageBits = NULL;
  31. static USHORT *ChipE10ImageBits = NULL;
  32. static USHORT *ChipL10ImageBits = NULL;
  33. static USHORT *ChipYXImageBits = NULL;
  34. static USHORT *ChipExpImageBits = NULL;
  35. static USHORT *ChipSplImageBits = NULL;
  36. static USHORT *ChipSmiImageBits = NULL;
  37. static USHORT *ChipXXYImageBits = NULL;
  38. static USHORT *ChipRleImageBits = NULL;
  39. static USHORT *ChipPigImageBits = NULL;
  40.  
  41. static int ChipSqrImageLen;
  42. static int ChipX2ImageLen;
  43. static int ChipE10ImageLen;
  44. static int ChipL10ImageLen;
  45. static int ChipYXImageLen;
  46. static int ChipExpImageLen;
  47. static int ChipSplImageLen;
  48. static int ChipSmiImageLen;
  49. static int ChipXXYImageLen;
  50. static int ChipRleImageLen;
  51. static int ChipPigImageLen;
  52.  
  53. static void *libOpen(char *name, int rev);
  54. static USHORT *imageBuild(USHORT *ImageBits, int ImageBitsLen, int *pLen);
  55.  
  56. void setup(void)
  57. {
  58.   struct NewWindow rpnWind = {
  59.     RPN_LEFT, RPN_TOP, RPN_WIDTH, RPN_HEIGHT,
  60.     BLUE_PEN, WHITE_PEN,
  61.     RPN_IDCMP1 | RPN_IDCMP2, RPN_FLAG1 | RPN_FLAG2,
  62.     &SinGadget, NULL,
  63.     (UBYTE *) "RPN Pocket Calculator V1.00",
  64.     NULL, NULL,
  65.     0, 0, 0, 0,
  66.     WBENCHSCREEN
  67.   };
  68.  
  69.   struct NewWindow regWind = {
  70.     REG_LEFT, REG_TOP, REG_WIDTH, REG_HEIGHT,
  71.     BLUE_PEN, WHITE_PEN,
  72.     REG_IDCMP, REG_FLAG1 | REG_FLAG2,
  73.     NULL, NULL,
  74.     (UBYTE *) "RPN Registers and Stack",
  75.     NULL, NULL,
  76.     0, 0, 0, 0,
  77.     WBENCHSCREEN
  78.   };
  79.  
  80.   int y;
  81.   char x;
  82.  
  83. /*----------------*
  84.  | Open libraries |
  85.  *----------------*/
  86.  
  87.   IntuitionBase = libOpen("intuition.library", REVISION);
  88.   GfxBase = libOpen("graphics.library", REVISION);
  89.  
  90. /*----------------------------------*
  91.  | Builds in the chip memory copies |
  92.  | of the gadget image nibbles      |
  93.  *----------------------------------*/
  94.  
  95.   SqrImage.ImageData = ChipSqrImageBits =
  96.       imageBuild(SqrImageBits, sizeof(SqrImageBits), &ChipSqrImageLen);
  97.   X2Image.ImageData = ChipX2ImageBits =
  98.       imageBuild(X2ImageBits, sizeof(X2ImageBits), &ChipX2ImageLen);
  99.   E10Image.ImageData = ChipE10ImageBits =
  100.       imageBuild(E10ImageBits, sizeof(E10ImageBits), &ChipE10ImageLen);
  101.   L10Image.ImageData = ChipL10ImageBits =
  102.       imageBuild(L10ImageBits, sizeof(L10ImageBits), &ChipL10ImageLen);
  103.   YXImage.ImageData = ChipYXImageBits =
  104.       imageBuild(YXImageBits, sizeof(YXImageBits), &ChipYXImageLen);
  105.   ExpImage.ImageData = ChipExpImageBits =
  106.       imageBuild(ExpImageBits, sizeof(ExpImageBits), &ChipExpImageLen);
  107.   SplImage.ImageData = ChipSplImageBits =
  108.       imageBuild(SplImageBits, sizeof(SplImageBits), &ChipSplImageLen);
  109.   SmiImage.ImageData = ChipSmiImageBits =
  110.       imageBuild(SmiImageBits, sizeof(SmiImageBits), &ChipSmiImageLen);
  111.   XXYImage.ImageData = ChipXXYImageBits =
  112.       imageBuild(XXYImageBits, sizeof(XXYImageBits), &ChipXXYImageLen);
  113.   RleImage.ImageData = ChipRleImageBits =
  114.       imageBuild(RleImageBits, sizeof(RleImageBits), &ChipRleImageLen);
  115.   PigImage.ImageData = ChipPigImageBits =
  116.       imageBuild(PigImageBits, sizeof(PigImageBits), &ChipPigImageLen);
  117.  
  118.   FirstGadget = &SinGadget;
  119.  
  120. /*----------------------------------*
  121.  | Open windows and initialises     |
  122.  | pointers to Intuition structures |
  123.  *----------------------------------*/
  124.  
  125.   if ( (Wrpn = (struct Window *) OpenWindow(&rpnWind)) == NULL) {
  126.     fprintf(stderr, "Can't open RPN main window ...\n");
  127.     cleanup(SYS_ERROR);
  128.   }
  129.  
  130.   if ( (Wreg = (struct Window *) OpenWindow(®Wind)) == NULL) {
  131.     fprintf(stderr, "Can't open RPN stack window ...\n");
  132.     cleanup(SYS_ERROR);
  133.   }
  134.   pRP = Wreg->RPort;
  135.   pIG = &InGadget;
  136.   pIS = &InInfo;
  137.  
  138.   SetMenuStrip(Wrpn, (MenuStrip = &GeneralMenu));
  139.  
  140. /*------------------------------------------------*
  141.  | Prints initial stack and register values (0's) |
  142.  *------------------------------------------------*/
  143.  
  144.   SetAPen(pRP, WHITE_PEN);
  145.   RectFill(pRP, 0, 0, REG_WIDTH, REG_HEIGHT);
  146.   SetAPen(pRP, BLUE_PEN);
  147.   Move(pRP, REG_LINE, 0);
  148.   Draw(pRP, REG_LINE, REG_HEIGHT);
  149.  
  150.   SetAPen(pRP, BLUE_PEN);
  151.   SetBPen(pRP, WHITE_PEN);
  152.   for (y=0; y<NREGS; y++) {
  153.     Move(pRP, REG_X0-ARS_OFFSET, REG_Y0+y*REG_DY);
  154.     x = '0'+y;
  155.     Text(pRP, &x, 1);
  156.     outReg(y);
  157.   }
  158.  
  159.   SetAPen(pRP, BLACK_PEN);
  160.   for (y=0; y<NACCS; y++) {
  161.     Move(pRP, ACC_X0-ARS_OFFSET, ACC_Y0+y*ACC_DY);
  162.     x = 'A'+y;
  163.     Text(pRP, &x, 1);
  164.     outAcc(y);
  165.   }
  166.  
  167.   SetAPen(pRP, RED_PEN);
  168.   for (y=NSTM1; y>=0; y--) {
  169.     Move(pRP, STK_X0-ARS_OFFSET, STK_Y0-y*STK_DY);
  170.     x = (y == NSTM1) ? 'T' : 'X'+y;
  171.     Text(pRP, &x, 1);
  172.   }
  173.   outStk();
  174. }
  175.  
  176. static void *libOpen(
  177.   char *name,                   /* Library name */
  178.   int rev                       /* Required revision (or 0) */
  179. )
  180. {/*--------------------------------------------*
  181.   | Local function: opens the required library |
  182.   *--------------------------------------------*/
  183.  
  184.   void *p;
  185.  
  186.   if ( (p = (void *) OpenLibrary(name, rev)) == NULL) {
  187.     fprintf(stderr, "Can't open library \"%s\"", name);
  188.     if (rev) fprintf(stderr, " revision %d", rev);
  189.     fprintf(stderr, ".\n");
  190.     cleanup(SYS_ERROR);
  191.   }
  192.   return p;
  193. }
  194.  
  195. void deallMem(void)
  196. {/*-----------------------------*
  197.   | Deallocates all chip memory |
  198.   *-----------------------------*/
  199.  
  200.   if (ChipSqrImageBits != NULL) {
  201.     FreeMem(ChipSqrImageBits, ChipSqrImageLen);
  202.   }
  203.   if (ChipX2ImageBits != NULL) {
  204.     FreeMem(ChipX2ImageBits, ChipX2ImageLen);
  205.   }
  206.   if (ChipE10ImageBits != NULL) {
  207.     FreeMem(ChipE10ImageBits, ChipE10ImageLen);
  208.   }
  209.   if (ChipL10ImageBits != NULL) {
  210.     FreeMem(ChipL10ImageBits, ChipL10ImageLen);
  211.   }
  212.   if (ChipYXImageBits != NULL) {
  213.     FreeMem(ChipYXImageBits, ChipYXImageLen);
  214.   }
  215.   if (ChipExpImageBits != NULL) {
  216.     FreeMem(ChipExpImageBits, ChipExpImageLen);
  217.   }
  218.   if (ChipSplImageBits != NULL) {
  219.     FreeMem(ChipSplImageBits, ChipSplImageLen);
  220.   }
  221.   if (ChipSmiImageBits != NULL) {
  222.     FreeMem(ChipSmiImageBits, ChipSmiImageLen);
  223.   }
  224.   if (ChipXXYImageBits != NULL) {
  225.     FreeMem(ChipXXYImageBits, ChipXXYImageLen);
  226.   }
  227.   if (ChipRleImageBits != NULL) {
  228.     FreeMem(ChipRleImageBits, ChipRleImageLen);
  229.   }
  230.   if (ChipPigImageBits != NULL) {
  231.     FreeMem(ChipPigImageBits, ChipPigImageLen);
  232.   }
  233. }
  234.  
  235. static USHORT *imageBuild(
  236.   USHORT *ImageBits,
  237.   int ImageBitsLen,
  238.   int *pLen
  239. )
  240. {/*---------------------------------------*
  241.   | Local function: builds an image from  |
  242.   | the specific bits for this gadget and |
  243.   | the fixed parts (first and last two   |
  244.   | lines, and the second bit plane)      |
  245.   *---------------------------------------*/
  246.  
  247.   UBYTE *p, *p0;
  248.  
  249.   *pLen = ImageBitsLen + sizeof(CommonImageBits1) +
  250.           sizeof(CommonImageBits2);
  251.   if ( (p = p0 = (UBYTE *) AllocMem(*pLen, MEMF_CHIP)) == NULL) {
  252.     cleanup(SYS_ERROR);
  253.   }
  254.   memcpy(p, CommonImageBits1, sizeof(CommonImageBits1));
  255.   p += sizeof(CommonImageBits1);
  256.   memcpy(p, ImageBits, ImageBitsLen);
  257.   p += ImageBitsLen;
  258.   memcpy(p, CommonImageBits2, sizeof(CommonImageBits2));
  259.   return (USHORT *) p0;
  260. }
  261.